package no8;

/**
 * 构造器内部的多态方法的行为
 * 说明以下两个问题
 * 1.构造器内也可以存在多态, 基类构造时,调用的是子类的实现
 * 2.构造前,分配给对象的存储空间初始化为二进制的零
 * @author gao
 *
 */

class Glyph{
	void draw (){
		System.out.println("Glyph.draw()");
	}
	
	public Glyph() {
		System.out.println("Glyph() before draw()");
		draw();//这步调了其它方法,而此方法又存在多态,所以最终会使用子类的实现
		System.out.println("Glyph() after draw()");
	}
}

class RoundGlyph extends Glyph{
	private int radius =1;
	public RoundGlyph(int r) {
		radius =r;
		System.out.println("RoundGlyph.RoundGlyph(), radius = "+radius);
	}
	
	void draw(){
		//构造父类时,radius并未初始化,如何处理?
		System.out.println("RoundGlyph.draw(), radius = "+ radius);
	}
}

public class PolyConstructors {	
	public static void main(String[] args) {
		new RoundGlyph(5);
	}
}
